home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CD ROM Paradise Collection 4
/
CD ROM Paradise Collection 4 1995 Nov.iso
/
program
/
swags_z.zip
/
SOUND.SWG
/
0025_CDRom Audio Disk Player.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1993-08-27
|
4KB
|
184 lines
{
NICHOLAS KIRSCH
Here is some source For using CD-ROM's With Pascal, if you get TP7,
it's still compatible.
{ Copyright 1993 by Michael W. Armstrong.
2800 Skipwith Rd
Richmond, VA 23294
Compuserve ID 72740, 1145
This Program is entered as Shareware. if you find it useful, a small
donation would be appreciated. Feel free to incorporate the code into
your own Programs.
}
{$X+}
Program CDPlay;
{$IfDef Windows}
{$C PRELOAD}
Uses
CD_Vars,
CDUnit_P,
WinCrt,
WinProcs;
{$else}
Uses
CD_Vars,
CDUnit_P,
Crt,
Drivers;
{$endIf}
Type
TotPlayRec = Record
Frames,
Seconds,
Minutes,
Nada : Byte;
end;
Var
GoodDisk : Boolean;
SaveExit : Pointer;
OldMode : Word;
CurrentTrack,
StartTrack,
endTrack : Integer;
TotPlay : TotPlayRec;
TrackInfo : Array [1..99] of PAudioTrackInfo;
Function LeadingZero(w : Word) : String;
Var
s : String;
begin
Str(w : 0, s);
LeadingZero := Copy('00', 1, 2 - Length(s)) + s;
end;
Procedure DrawScreen;
Const
TStr = '%03d:%02d';
VStr = '%1d.%2d';
Var
FStr : PChar;
NStr : String;
Param : Array [1..2] of LongInt;
Code : Integer;
begin
WriteLn('CD ROM Audio Disk Player');
WriteLn('Copyright 1992 by M. W. ARMSTRONG');
Param[1] := MSCDEX_Version.Major;
Param[2] := MSCDEX_Version.Minor;
{$IfDef Windows}
wvsPrintf(FStr, VStr, Param);
{$else}
FormatStr(NStr, VStr, Param);
{$endIf}
WriteLn('MSCDEX Version ', NStr);
Str(NumberOfCD, NStr);
WriteLn('Number of CD ROM Drives is: ' + Nstr);
WriteLn('First CD Drive Letter is : ' + Chr(FirstCD + 65));
WriteLn('There are ' + LeadingZero(endTrack - StartTrack + 1) +
' Tracks on this disk');
Code := 1;
end;
{***********************************************************************}
{***********************************************************************}
Procedure Setup;
Var
LeadOut,
StartP,
TotalPlayTime : LongInt;
I : Integer;
A, B, C : LongInt;
Track : Byte;
EA : Array [1..4] of Byte;
SP, EP : LongInt;
begin
FillChar(AudioDiskInfo, SizeOf(AudioDiskInfo), #0);
DeviceStatus;
if Audio then
begin
Audio_Disk_Info;
TotalPlayTime := 0;
LeadOut := AudioDiskInfo.LeadOutTrack;
StartTrack := AudioDiskInfo.LowestTrack;
endTrack := AudioDiskInfo.HighestTrack;
CurrentTrack := StartTrack;
I := StartTrack - 1;
Repeat { Checks if Audio Track or Data Track }
Inc(I);
Track := I;
Audio_Track_Info(StartP, Track);
Until (Track and 64 = 0) or (I = endTrack);
StartTrack := I;
For I := StartTrack to endTrack DO
begin
Track := I;
Audio_Track_Info(StartP, Track);
New(TrackInfo[I]);
FillChar(TrackInfo[I]^, SizeOf(TrackInfo[I]^), #0);
TrackInfo[I]^.Track := I;
TrackInfo[I]^.StartPoint := StartP;
TrackInfo[I]^.TrackControl := Track;
end;
For I := StartTrack to endTrack - 1 DO
TrackInfo[I]^.endPoint := TrackInfo[I+1]^.StartPoint;
TrackInfo[endTrack]^.endPoint := LeadOut;
For I := StartTrack to endTrack DO
Move(TrackInfo[I]^.endPoint, TrackInfo[I]^.Frames, 4);
TrackInfo[StartTrack]^.PlayMin := TrackInfo[StartTrack]^.Minutes;
TrackInfo[StartTrack]^.PlaySec := TrackInfo[StartTrack]^.Seconds - 2;
For I := StartTrack + 1 to endTrack DO
begin
EP := (TrackInfo[I]^.Minutes * 60) + TrackInfo[I]^.Seconds;
SP := (TrackInfo[I-1]^.Minutes * 60) + TrackInfo[I-1]^.Seconds;
EP := EP - SP;
TrackInfo[I]^.PlayMin := EP div 60;
TrackInfo[I]^.PlaySec := EP Mod 60;
end;
TotalPlayTime := AudioDiskInfo.LeadOutTrack -
TrackInfo[StartTrack]^.StartPoint;
Move(TotalPlayTime, TotPlay, 4);
end;
end;
{***********************************************************************}
begin
Setup;
if Audio then
if Playing then
StopAudio
else
begin
StopAudio;
Play_Audio(TrackInfo[StartTrack]^.StartPoint,
TrackInfo[endTrack]^.endPoint);
Audio_Status_Info;
DrawScreen;
end
else
WriteLn('This is not an Audio CD');
WriteLn('UPC Code is: ', UPC_Code);
end.